/**
* Universidade de Brasilia
* 2013.1
* Trabalho de Programacao Orientada a Objetos
* Professor: Fernando Chacon
* Alunos
*   Lucas Lo Ami Alvino Silva - 09/0009886
*   <Melinho colocar seu nome aqui>
*
*/#include "../include/Stub.h"

Stub::Stub()
{
    //ctor
}

Stub::~Stub()
{
    //dtor
}

EErroStub::EErroStub(string mensagem)
{

    this->mensagem = mensagem;
}

string EErroStub::oQue()
{
    return mensagem;
}

//-----------------------------------------------------------------------------------------
// METODOS DO STUBCONTA
//-----------------------------------------------------------------------------------------

string StubConta::autenticar(Senha senha, NumeroConta numeroConta)
{
    //Conta conta;
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Numero da conta que foi enviado: " << numeroConta.getInput() << endl << endl;
    cout << "Senha da conta que foi enviada: " << senha.getInput() << endl << endl;

    if ((senha.getInput() != "123456") && (numeroConta.getInput() != "1111")) {
        //conta.setNumeroConta(numeroConta);
        //conta.setSenha(senha);
        //conta.setTipoConta()
        return numeroConta.getInput();
    }

    return "0";
}

Conta StubConta::getConta(NumeroConta numeroConta)
{
    Conta conta(Nome("Lucas"), Senha("123456"), numeroConta, TipoConta("1"), Dinheiro("123,1"));
    return conta;
}

string StubConta::alterarSenha(Senha senha, Conta conta)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Numero da conta que foi enviado: " << conta.getNumeroConta().getInput() << endl << endl;
    cout << "Senha da conta que foi enviada: " << senha.getInput() << endl << endl;

    if (senha.getInput() != "123456")
        return senha.getInput();
    return "0";
}

Conta StubConta::sacar(Dinheiro valor, Conta conta) throw (EErroStub)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Numero da conta que foi enviado: " << conta.getNumeroConta().getInput() << endl << endl;
    cout << "Valor do saque que foi enviado: " << valor.getInput() << endl << endl;

    if (valor.getInput() != "10,000")
        return conta;
    throw EErroStub("Voce nao te saldo suficiente para efetuar esse saque!");
}

Conta StubConta::depositar(Dinheiro valor, Conta conta) throw (EErroStub)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Numero da conta que foi enviado: " << conta.getNumeroConta().getInput() << endl << endl;
    cout << "Valor do deposito que foi enviado: " << valor.getInput() << endl << endl;

    if (valor.getInput() != "10,000")
        return conta;
    throw EErroStub("Voce nao pode efetuar um deposito com esse valor!");
}

string StubConta::agendarPag(CodigoPagamento cod, Data data, Dinheiro valor, Conta conta)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Numero da conta que foi enviado: " << conta.getNumeroConta().getInput() << endl << endl;
    cout << "Valor do pagamento que foi enviado: " << valor.getInput() << endl << endl;
    cout << "Valor do codigo do pagamento que foi enviado: " << cod.getInput() << endl << endl;
    cout << "Valor da data de pagamento que foi enviado: " << data.getInput() << endl << endl;

    if((data.getInput() != "15-05-2010") && (valor.getInput() != "10,000")) {
        return cod.getInput();
    }
    return "0";
}

bool StubConta::cancelarPag(CodigoPagamento cod, Conta conta)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Numero da conta que foi enviado: " << conta.getNumeroConta().getInput() << endl << endl;
    cout << "Valor do codigo do pagamento que foi enviado: " << cod.getInput() << endl << endl;

    if(cod.getInput() != "1") {
        return true;
    }
    return false;
}

list<Pagamento> StubConta::listarPag(Conta conta)
{
    //IMPLEMENTAR ESSA PARADA
}

//-----------------------------------------------------------------------------------------
// METODOS DO STUBGERENTE
//-----------------------------------------------------------------------------------------
string StubGerente::autenticar(Senha senha, Matricula matricula)
{
    //Conta conta;
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Matricula do gerente que foi enviado: " << matricula.getInput() << endl << endl;
    cout << "Senha do gerente que foi enviada: " << senha.getInput() << endl << endl;

    if ((senha.getInput() != "123456") && (matricula.getInput() != "11111")) {
        //conta.setNumeroConta(numeroConta);
        //conta.setSenha(senha);
        //conta.setTipoConta()
        return matricula.getInput();
    }

    return "0";
}

Gerente StubGerente::getGerente(Matricula matricula)
{
    Gerente gerente(Nome("Joaquim"), matricula, Senha("123455"));
    return gerente;
}

Conta StubGerente::getConta(NumeroConta numeroConta)
{
    Conta conta(Nome("Lucas"), Senha("123456"), numeroConta, TipoConta("1"), Dinheiro("123,1"));
    return conta;
}

string StubGerente::alterarSenha(Senha senha, Gerente gerente)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Matricula do gerente que foi enviado: " << gerente.getMatricula().getInput() << endl << endl;
    cout << "Senha da conta que foi enviada: " << senha.getInput() << endl << endl;

    if (senha.getInput() != "123456")
        return senha.getInput();
    return "0";
}

string StubGerente::abrirConta(Nome nome, TipoConta tipoConta, Dinheiro limiteCredito)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Nome do cliente que foi enviado: " << nome.getInput() << endl << endl;
    cout << "Tipo de conta que foi enviado: " << tipoConta.getInput() << endl << endl;
    cout << "Limite de credito que foi enviado: " << limiteCredito.getInput() << endl << endl;

    if ((nome.getInput() != "Joao") && (limiteCredito.getInput() != "10,000")) {
        return nome.getInput();
    }
    return "0";

}

bool StubGerente::fecharConta(NumeroConta numeroConta)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Numero da conta que foi enviado: " << numeroConta.getInput() << endl << endl;

    if(numeroConta.getInput() != "1111") {
        return true;
    }
    return false;
}

bool StubGerente::bloquearConta(NumeroConta numeroConta)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Numero da conta que foi enviado: " << numeroConta.getInput() << endl << endl;

    if(numeroConta.getInput() != "1111") {
        return true;
    }
    return false;
}

bool StubGerente::desbloquearConta(NumeroConta numeroConta)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Numero da conta que foi enviado: " << numeroConta.getInput() << endl << endl;

    if(numeroConta.getInput() != "1111") {
        return true;
    }
    return false;
}

list<Conta> StubGerente::listarContas()
{
    //TODO
}

bool StubGerente::alterarConta(Nome nome, TipoConta tipoConta, Dinheiro limiteCredito, Conta conta)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Nome do cliente que foi enviado: " << nome.getInput() << endl << endl;
    cout << "Tipo de conta que foi enviado: " << tipoConta.getInput() << endl << endl;
    cout << "Limite de credito que foi enviado: " << limiteCredito.getInput() << endl << endl;
    cout << "Numero da conta que foi enviado: " << conta.getNumeroConta().getInput() << endl << endl;

    if((nome.getInput() != "Joao") && (limiteCredito.getInput() != "10,000")) {
        return true;
    }
    return false;
}

//-----------------------------------------------------------------------------------------
// METODOS DO STUBGERENTE
//-----------------------------------------------------------------------------------------
string StubAdmin::autenticar(Senha senha)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Senha do admin que foi enviado: " << senha.getInput() << endl << endl;

    if (senha.getInput() != "123456") {
        //conta.setNumeroConta(numeroConta);
        //conta.setSenha(senha);
        //conta.setTipoConta()
        return senha.getInput();
    }

    return "0";
}

Administrador StubAdmin::getAdministrador(Senha senha)
{
    Administrador admin(Senha("213456"));
    return admin;
}

Gerente StubAdmin::getGerente(Matricula matricula)
{
    Gerente gerente(Nome("Joaquim"), matricula, Senha("123455"));
    return gerente;
}

string StubAdmin::alterarSenha(Senha senha, Administrador admin)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Senha atual do administrador que foi enviado: " << admin.getSenha().getInput() << endl << endl;
    cout << "Senha da conta que foi enviada: " << senha.getInput() << endl << endl;

    if (senha.getInput() != "123456")
        return senha.getInput();
    return "0";
}

string StubAdmin::cadastrarGerente(Nome nome, Matricula matricula)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Nome do gerente que foi enviado: " << nome.getInput() << endl << endl;
    cout << "Matricula do gerente que foi enviada: " << matricula.getInput() << endl << endl;

    if ((nome.getInput() != "Joao") && (matricula.getInput() != "11111"))
        return nome.getInput();
    return "0";
}

list<Gerente> StubAdmin::listarGerentes()
{
    //TODO
}

bool StubAdmin::alterarGerente(Nome nome, Gerente gerente)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Nome atual do gerente que foi enviado: " << gerente.getNome().getInput() << endl << endl;
    cout << "Nome do gerente que foi enviada: " << nome.getInput() << endl << endl;

    if (nome.getInput() != "Joao") {
        return true;
    }
    return false;
}

bool StubAdmin::removerGerente(Matricula matricula)
{
    cout << "Voce esta no ambiente stub" << endl << endl;
    cout << "Matricula do gerente que foi enviado: " << matricula.getInput() << endl << endl;

    if (matricula.getInput() != "11111") {
        return true;
    }
    return false;
}
